package com.niiwoo.civet.account.enums;/**
 * Created by DELL on 2017/11/22.
 */

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

/**
 * 账单一级科目
 *
 * @author xiaoyingping
 * @create 2017-11-22 15:33
 **/
@AllArgsConstructor
@Getter
public enum BillFirstSubjectEnum {

    /**
     * 公共
     */
    ADJUST_ACCOUNT_IN("9001", "调账", "错账调整", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    ADJUST_ACCOUNT_OUT("9002", "调账", "错账调整", null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),

    /**
     * 普通用户（一级科目)
     */
    USER_RECHARGE("1100", "充值", "充值", IndexBillTypeEnum.INDEX_RECHARGE, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_WITHDRAW_BACK("1102", "提现退回", "提现退回", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_INVEST_BACK("1104", "投资退回", "投资退回", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_INVEST_REPAYMENT("1106", "投资回款", "投资回款", IndexBillTypeEnum.INDEX_INVEST_BACK, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_GUARANTEE_BACK("1108", "担保退回", "担保退回", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_GUARANTEE_INCOME("1110", "担保收入", "担保收入", IndexBillTypeEnum.INDEX_GUARANTEE_IN, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_GUARANTEE_REPAYMENT("1112", "担保回款", "担保回款", IndexBillTypeEnum.INDEX_GUARANTEE_REPAYMENT, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_GUARANTEE_PAY_BACK("1114", "垫付返还", "垫付返还", IndexBillTypeEnum.INDEX_GUARANTEE_BACK, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_RED("1118", "红包", "平台奖励", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_PLATFORM_GIVEN("1120", "奖励", "平台奖励", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_SUBSIDY("1122", "补贴", "平台奖励", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_MECHANISM_REPLACEMENT("1124", "机构代充", "机构代充", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_BORROW_INCOME("1126", "借款", "借款", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_TRANSFER_IN("1128", "资金划拨", "资金划拨", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_OTHER_IN("1130", "其他", "其他", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_REPAYMENT_BACK("1132", "还款退回", "还款退回", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_TRANSFER_CREDITOR("1134", "债权转让", "转让金额", null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GENERAL),

    USER_WITHDRAW("1200", "提现" , "提现", IndexBillTypeEnum.INDEX_WITHDRAW, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_BORROW("1202", "借款", "借款", null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_REPAYMENT("1204", "还款", "还款", IndexBillTypeEnum.INDEX_REPAYMENT, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_INVEST("1206", "投资", "投资", IndexBillTypeEnum.INDEX_INVEST, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_GUARANTEE_OUTCOME("1208", "担保支出", "担保支出", IndexBillTypeEnum.INDEX_GUARANTEE_OUT, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_GUARANTEE_PAY("1210", "担保垫付", "担保垫付", IndexBillTypeEnum.INDEX_GUARANTEE_PAY, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_TRANSFER_OUT("1212", "资金划拨", "资金划拨", null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_RED_OUT("1214", "红包", "红包", null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_OTHER_OUT("1216", "其他", "其他", null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_RECHARGE_OUT("1218", "充值", "充值", null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_OVERDUE_MANAGE("1220", "逾期管理", "逾期管理", null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),
    USER_TRANSFER_CREDITOR_OUT("1222", "转让手续费", "债权转让手续费", null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GENERAL),

//    USER_BORROW_BACK("232","借款退回",null,null,null,DetailKeyEnum.USER_BORROW_BACK,null),


    /**
     * 合作机构-极速借机构（一级科目）
     */
    COOPERATE_AGENCY_RECHARGE("2100", "充值", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),
    COOPERATE_AGENCY_WITHDRAW_RETURN("2102", "提现", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),
    COOPERATE_AGENCY_SERVICE_FEE("2104", "服务费", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),
    COOPERATE_AGENCY_UNMARGIN_FEE("2106", "保证金", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),
    COOPERATE_AGENCY_UNINSURANCE_FEE("2108", "履约险", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),
    COOPERATE_AGENCY_PAYMENT_RECEIVABLE("2110", "垫付回款", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),

    COOPERATE_AGENCY_WITHDRAW("2200", "提现", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),
    COOPERATE_AGENCY_REPLACEMENT("2202", "机构代充", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),
    COOPERATE_AGENCY_MARGIN_FEE("2204", "保证金", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),
    COOPERATE_AGENCY_INSURANCE_FEE("2206", "履约险", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),
    COOPERATE_AGENCY_ADVANCES("2208", "垫付", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.COOPERATE_AGENCY),

    /**
     * 担保机构（一级科目）
     */
    GUARANTEE_AGENCY_RECHARGE("3100", "充值", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GUARANTEE_AGENCY),
    GUARANTEE_AGENCY_WITHDRAW_RETURN("3102", "提现", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GUARANTEE_AGENCY),
    GUARANTEE_AGENCY_ADVANCE_GUARANTEE_IN("3104", "担保垫付", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GUARANTEE_AGENCY),
    GUARANTEE_AGENCY_GUARANTEE("3106", "担保", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GUARANTEE_AGENCY),
    GUARANTEE_AGENCY_REPAYMENT("3108", "还款", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GUARANTEE_AGENCY),
    GUARANTEE_AGENCY_ADVANCE_GUARANTEE_IN_BACK("3110", "垫付退回", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GUARANTEE_AGENCY),//3104的回滚

    GUARANTEE_AGENCY_WITHDRAW("3200", "提现", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GUARANTEE_AGENCY),
    GUARANTEE_AGENCY_ADVANCE_GUARANTEE_OUT("3202", "担保垫付", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GUARANTEE_AGENCY),
    GUARANTEE_AGENCY_ADVANCE_OTHER("3204", "其他", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GUARANTEE_AGENCY),


    /**
     * 平台（一级科目）
     */
    PLATFORM_SERVICE_FEE_IN("4100", "服务费", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_WITHDRAW_BACK("4102", "提现", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_RECHARGE("4104", "充值", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_RED_IN("4106", "红包", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_OTHER_IN("4108", "其他", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_TRANSFER("4110", "转账", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.PLATFORM),

    PLATFORM_SERVICE_FEE_OUT("4200", "服务费", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_WITHDRAW("4202", "提现", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_OTHER_OUT("4204", "其他", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_PREMIUM_CONTRIBUTION("4206", "质保金捐献", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_EXPERIENCE_BID("4208", "体验标", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_RED_OUT("4210", "红包", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_MARKETING_INCENTIVES("4212", "奖励", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_SUBSIDIES("4214", "补贴", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.PLATFORM),
    PLATFORM_TRANSFER_OUT("4216", "转账", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.PLATFORM),

    /**
     * 质保金
     */
    ZHIBAOJIN_BORROW("5100", "借款", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.ZHIBAOJIN),
    ZHIBAOJIN_GUARANTEE("5102", "担保", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.ZHIBAOJIN),
    ZHIBAOJIN_PLATFORM("5104", "平台", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.ZHIBAOJIN),

    ZHIBAOJIN_INVEST("5200", "投资", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.ZHIBAOJIN),

    /**
     * 担保保证金账户
     */
    GUARANTEE_MARGIN_IN("6100", "冻结保证金", null, null, BillSecondSubjectEnum.InoutTypeEnum.IN_TYPE.getType(), BillUserTypeEnum.GUARANTEE_ACCOUNT),

    GUARANTEE_MARGIN_OUT("6200", "释放保证金", null, null, BillSecondSubjectEnum.InoutTypeEnum.OUT_TYPE.getType(), BillUserTypeEnum.GUARANTEE_ACCOUNT),
    ;


    private String code;
    private String codeName;
    private String title;
    private IndexBillTypeEnum indexEnum;//所属检索类型
    private Byte inOutType;
    private BillUserTypeEnum userType; //用户类型

    public static BillFirstSubjectEnum getEnumByCode(String enumCode) {
        if (enumCode != null && !"".equals(enumCode)) {
            for (BillFirstSubjectEnum retEnum : BillFirstSubjectEnum.values()) {
                if (retEnum.code.equals(enumCode)) {
                    return retEnum;
                }
            }
        }
        return null;
    }


    /**
     * 检索科目(页面显示有10+2种)
     */
    @AllArgsConstructor
    @Getter
    public enum IndexBillTypeEnum {
        INDEX_RECHARGE("1100", "充值"),
        INDEX_WITHDRAW("1200", "提现"),
        INDEX_INVEST("1206", "投资"),
        INDEX_INVEST_BONUS("1120", "投资奖励"),
        INDEX_INVEST_BACK("1106", "投资回款"),
        INDEX_REPAYMENT("1204", "还款"),

        INDEX_GUARANTEE_OUT("1208", "担保支出"),
        INDEX_GUARANTEE_IN("1110", "担保收入"),
        INDEX_GUARANTEE_REPAYMENT("1112", "担保回款"),
        INDEX_GUARANTEE_PAY("1210", "担保垫付"),
        INDEX_GUARANTEE_BACK("1114", "垫付返还"),

        ;
        private String indexCode;
        private String indexDesc;

        public static IndexBillTypeEnum getEnumByCode(String enumCode) {
        	if (enumCode != null && !"".equals(enumCode)) {
                for (IndexBillTypeEnum retEnum : IndexBillTypeEnum.values()) {
                    if (enumCode.equals(retEnum.getIndexCode())) {
                        return retEnum;
                    }
                }
            }
            return null;
        }

    }

    /**
     * 是否是借款相关的code
     * @return
     */
    public static List<String> containBorrowCode() {

        List<String> strList = new ArrayList<>();
        strList.add(BillFirstSubjectEnum.USER_BORROW_INCOME.getCode());
        strList.add(BillFirstSubjectEnum.USER_BORROW.getCode());
        strList.add(BillFirstSubjectEnum.USER_REPAYMENT.getCode());

        return strList;
    }

    /**
     * 借款入口-借款相关奖励账单显示
     * @return
     */
    public static List<String> containBorrowBounsCode() {
        List<String> strList = new ArrayList<>();

        strList.add(BillSecondSubjectEnum.USER_BORROW_INCOME_AMOUNT.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_BACK_SERVICE_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_BACK_SERVICE_FEE_YUNDAI.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_BACK_GUARANTEE_SERVICE_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_BACK_GUARANTEE_SERVICE_FEE_YUNDAI.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_COMPENSATION.getCode());

        strList.add(BillSecondSubjectEnum.USER_BORROW_SERVICE_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_GUARANTEE_SERVICE_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_PRE_ARBITRATION_SERVICE_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_RECOMMENDED_SERVICE_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_TUNE.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_GUARANTEE_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_BORROW_SERVICE_FEE_OVERDUE_FINE.getCode());

        strList.add(BillSecondSubjectEnum.USER_REPAYMENT_CORPUS.getCode());
        strList.add(BillSecondSubjectEnum.USER_REPAYMENT_INTEREST.getCode());
        strList.add(BillSecondSubjectEnum.USER_REPAYMENT_MANAGER_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_REPAYMENT_GUARANTEE_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_REPAYMENT_COLLECT_FEE.getCode());
        strList.add(BillSecondSubjectEnum.USER_REPAYMENT_CORPUS_PENALTY.getCode());
        strList.add(BillSecondSubjectEnum.USER_REPAYMENT_INTEREST_PENALTY.getCode());
        strList.add(BillSecondSubjectEnum.USER_REPAYMENT_PENALTY.getCode());

        strList.add(BillSecondSubjectEnum.USER_RED_BORROW.getCode());
        strList.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_BORROW_BONUS.getCode());
        strList.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_BORROW.getCode());
        strList.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_BORROWED.getCode());
        strList.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_BORROWED_FIRST.getCode());
        strList.add(BillSecondSubjectEnum.USER_SUBSIDY_BORROW.getCode());

        return strList;
    }

    /**
     * 是否是投资相关的code
     * @return
     */
    public static List<String> containInvestCode() {

        List<String> strList = new ArrayList<>();
        strList.add(BillFirstSubjectEnum.USER_INVEST_BACK.getCode());
        strList.add(BillFirstSubjectEnum.USER_INVEST_REPAYMENT.getCode());
        strList.add(BillFirstSubjectEnum.USER_INVEST.getCode());

        return strList;
    }

    /**
     * 投资入口-投资相关奖励账单显示
     * @return
     */
    public static List<String> containInvestBounsCode() {
        List<String> strList = new ArrayList<>();

        strList.add(BillSecondSubjectEnum.USER_INVEST_BACK.getCode());
        strList.add(BillSecondSubjectEnum.USER_INVEST_BACK_SERVICE_FEE.getCode());

        strList.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_CORPUS.getCode());
        strList.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_INTEREST.getCode());
        strList.add(BillSecondSubjectEnum.USER_INVEST_PRINCIPAL_PENALTY.getCode());
        strList.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_PENALTY.getCode());

        strList.add(BillSecondSubjectEnum.USER_INVEST.getCode());
        strList.add(BillSecondSubjectEnum.USER_INVEST_SERVICE_FEE.getCode());

        strList.add(BillSecondSubjectEnum.USER_SUBSIDY_INVEST.getCode());
        strList.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_INVEST.getCode());
        strList.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_INVEST_CUMULATIVE.getCode());
        strList.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_INVEST_BONUS.getCode());
        strList.add(BillSecondSubjectEnum.USER_RED_INVEST.getCode());
        strList.add(BillSecondSubjectEnum.USER_RED_INVEST_COUPON.getCode());
        strList.add(BillSecondSubjectEnum.USER_RED_COUPON_RATE_INTEREST.getCode());
        strList.add(BillSecondSubjectEnum.USER_RED_FINANCIAL_INTEREST.getCode());

        return strList;
    }

    /**
     * 平台发放-奖励code
     * @return
     */
    public static List<String> containBounsCode() {
        List<String> strList = new ArrayList<>();
        strList.add(BillFirstSubjectEnum.USER_RED.getCode());
        strList.add(BillFirstSubjectEnum.USER_SUBSIDY.getCode());
        strList.add(BillFirstSubjectEnum.USER_PLATFORM_GIVEN.getCode());
        return strList;
    }


}
